﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "GcmpModelInterface.h"
#include "INoElementIdDbObject.h"
#include "NdbObjectSchematic.h"
#include "DbDataSchema.h"

namespace gcmp {

    class IExternalData;

    /// \brief 外部数据组件的接口。
    class GCMP_MODEL_INTERFACE_EXPORT IExternalDataComponent : public IDbObject
    {
        DEFINE_CAST_DERIVED(gcmp::IExternalDataComponent, gcmp::IDbObject)

    public:
        virtual ~IExternalDataComponent();
    public:
        /// \brief 获得Element元素的所有外部数据
        /// \return const std::vector<OwnerPtr<IExternalData>>& 返回Element元素的所有外部数据
        virtual const std::vector<OwnerPtr<IExternalData>>& GetAllExternalDatas() const = 0;

        /// \brief 获得Element元素的所有外部数据
        /// \return std::vector<OwnerPtr<IExternalData>>& 返回Element元素的所有外部数据
        virtual std::vector<OwnerPtr<IExternalData>>& GetAllExternalDatas() = 0;

        /// \brief 注册外部数据,外部数据在Element中以Map方式存储。
        /// \param key 外部数据所对应的key。
        /// \param externalData 需要注册的外部数据。
        /// \return bool 注册成功返回true，否则返回false。
        virtual bool RegisterExternalData(const std::wstring& key, OwnerPtr<IExternalData> externalData) = 0;

        /// \brief 注销外部数据,外部数据在Element中以Map方式存储。
        /// \param key 外部数据所对应的key。
        /// \return bool 注销成功返回true，否则返回false。
        virtual bool UnregisterExternalData(const std::wstring& key) = 0;

        /// \brief 查询外部数据,外部数据在Element中以Map方式存储。
        /// \param key 外部数据所对应的key。
        /// \return const IExternalData* 外部数据指针，如果没有查询到返回空指针。
        virtual const IExternalData* FindExternalData(const std::wstring& key) const = 0;

        /// \brief 查询外部数据,外部数据在Element中以Map方式存储。
        /// \param key 外部数据所对应的key。
        /// \return IExternalData* 外部数据指针，如果没有查询到返回空指针。
        virtual IExternalData* FindExternalData(const std::wstring& key) = 0;
    };

}// namespace gcmp


